#include <winsock2.h>
#include <stdio.h>

int main()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD(1, 1);

	err = WSAStartup(wVersionRequested, &wsaData);
	if(err != 0)
	{
		return  1;
	}

	if(LOBYTE(wsaData.wVersion) != 1 ||
		HIBYTE(wsaData.wVersion) != 1)
	{
		WSACleanup();
		return -1;
	}

	SOCKET sockSvr = socket(AF_INET, SOCK_DGRAM, 0);

	SOCKADDR_IN addrSvr;
	addrSvr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
	addrSvr.sin_family = AF_INET;
	addrSvr.sin_port = htons(6000);

	bind(sockSvr, (SOCKADDR*)&addrSvr, sizeof(SOCKADDR));

	char recvBuf[100];
	char sendBuf[100];
	char tempBuf[200];

	SOCKADDR_IN addrClient;
	int len = sizeof(SOCKADDR);
	while(1)
	{
		recvfrom(sockSvr, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len);
		if('q' == recvBuf[0])
		{
			sendto(sockSvr, "q", strlen("q") + 1, 0, (SOCKADDR*)&addrClient,len);
			printf("Chat end!\n");
			break;
		}
		sprintf(tempBuf, "%s say : %s", inet_ntoa(addrClient.sin_addr), recvBuf);
		printf("%s\n", tempBuf);
		
		printf("Please input data:\n");
		gets(sendBuf);
		sendto(sockSvr, sendBuf, strlen(sendBuf) + 1, 0, (SOCKADDR*)&addrClient, len);
	}
	closesocket(sockSvr);
	WSACleanup();
	return 0;
}
